package com.learn.template;

import lombok.extern.slf4j.Slf4j;

/**
 * <p>项目名称: design-pattern </p>
 *
 * <p>文件名称: Template </p>
 *
 * 模板方法的模板
 */
@Slf4j
public abstract class Template {

    /**
     * 模板方法
     */
    public void templateMethod(){
        //调用基本方法
        abstractMethod();
        hookMethod();
        concreteMethod();
    }
    /**
     * 基本方法的声明（由子类实现）
     */
    protected abstract void abstractMethod();

    /**
     * 基本方法(空方法--子类可改写)
     */
    protected void hookMethod(){}

    /**
     * 基本方法（已经实现）
     */
    private void concreteMethod(){
        //业务相关的代码
        log.info("这里执行不可更改的逻辑");
    }
}
